SpringDataPersistenceContextConfigurationBuilder.java
package org.codefilarete.stalactite.spring.repository.config;
import javax.sql.DataSource;
import org.codefilarete.stalactite.engine.ConnectionSettings;
import org.codefilarete.stalactite.engine.DatabaseVendorSettings;
import org.codefilarete.stalactite.engine.PersistenceContextConfigurationBuilder;
import org.codefilarete.stalactite.spring.transaction.StalactitePlatformTransactionManager;
import org.codefilarete.stalactite.sql.ConnectionConfiguration;
import org.codefilarete.stalactite.sql.ConnectionConfiguration.ConnectionConfigurationSupport;
import org.springframework.transaction.PlatformTransactionManager;
/**
* Dedicated {@link PersistenceContextConfigurationBuilder} for Spring Data: creates a {@link StalactitePlatformTransactionManager} as
* {@link org.codefilarete.stalactite.sql.ConnectionProvider} of the built {@link ConnectionConfiguration}
*
* @author Guillaume Mary
*/
public class SpringDataPersistenceContextConfigurationBuilder extends PersistenceContextConfigurationBuilder {
public SpringDataPersistenceContextConfigurationBuilder(DatabaseVendorSettings vendorSettings, ConnectionSettings connectionSettings, DataSource dataSource) {
super(vendorSettings, connectionSettings, dataSource);
}
/**
* Overridden to create a {@link StalactitePlatformTransactionManager} as {@link org.codefilarete.stalactite.sql.ConnectionProvider} of the
* result.
* @return a {@link ConnectionConfiguration} made of a {@link StalactitePlatformTransactionManager} as its {@link org.codefilarete.stalactite.sql.ConnectionProvider}
*/
@Override
protected ConnectionConfiguration buildConnectionConfiguration() {
return new PlatformTransactionManagerConnectionConfigurationSupport(new StalactitePlatformTransactionManager(super.dataSource), super.connectionSettings.getBatchSize());
}
static class PlatformTransactionManagerConnectionConfigurationSupport extends ConnectionConfigurationSupport {
private final PlatformTransactionManager platformTransactionManager;
public PlatformTransactionManagerConnectionConfigurationSupport(StalactitePlatformTransactionManager connectionProvider, int batchSize) {
super(connectionProvider, batchSize);
this.platformTransactionManager = connectionProvider;
}
public PlatformTransactionManager getPlatformTransactionManager() {
return platformTransactionManager;
}
}
}